package com.smart.community.region.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.smart.community.region.entity.PropertyCompanyBuildingType;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 物业公司建筑类型Mapper接口
 * 
 * @author Wu.Liang
 * @since 2025-01-30
 */
@Mapper
public interface PropertyCompanyBuildingTypeMapper extends BaseMapper<PropertyCompanyBuildingType> {

    /**
     * 分页查询物业公司建筑类型列表
     * 
     * @param page 分页参数
     * @param propertyCompanyId 物业公司ID
     * @param buildingTypeName 建筑类型名称（模糊查询）
     * @param buildingTypeCode 建筑类型编码（模糊查询）
     * @param status 状态
     * @return 分页结果
     */
    IPage<PropertyCompanyBuildingType> selectPageByCondition(
        Page<PropertyCompanyBuildingType> page,
        @Param("propertyCompanyId") Long propertyCompanyId,
        @Param("buildingTypeName") String buildingTypeName,
        @Param("buildingTypeCode") String buildingTypeCode,
        @Param("status") Integer status
    );

    /**
     * 根据物业公司ID查询建筑类型列表
     * 
     * @param propertyCompanyId 物业公司ID
     * @return 建筑类型列表
     */
    List<PropertyCompanyBuildingType> selectByPropertyCompanyId(@Param("propertyCompanyId") Long propertyCompanyId);

    /**
     * 检查建筑类型编码是否重复
     * 
     * @param propertyCompanyId 物业公司ID
     * @param buildingTypeCode 建筑类型编码
     * @param excludeId 排除的ID（用于更新时检查）
     * @return 重复数量
     */
    int checkCodeDuplicate(
        @Param("propertyCompanyId") Long propertyCompanyId,
        @Param("buildingTypeCode") String buildingTypeCode,
        @Param("excludeId") Long excludeId
    );

    /**
     * 分页查询平台公共建筑类型列表（不关联物业公司）
     * 
     * @param page 分页参数
     * @param buildingTypeName 建筑类型名称（模糊查询）
     * @param buildingTypeCode 建筑类型编码（模糊查询）
     * @param status 状态
     * @return 分页结果
     */
    IPage<PropertyCompanyBuildingType> selectPublicBuildingTypePage(
        Page<PropertyCompanyBuildingType> page,
        @Param("buildingTypeName") String buildingTypeName,
        @Param("buildingTypeCode") String buildingTypeCode,
        @Param("status") Integer status
    );

    /**
     * 查询平台公共建筑类型列表（不关联物业公司）
     * 
     * @return 建筑类型列表
     */
    List<PropertyCompanyBuildingType> selectPublicBuildingTypes();

    /**
     * 根据ID列表查询建筑类型列表
     * 
     * @param ids ID列表
     * @return 建筑类型列表
     */
    List<PropertyCompanyBuildingType> selectByIds(@Param("ids") List<Long> ids);
}
